package com.leven.easyerp.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 日期辅助工具类
 * 
 * @author Leven.Chen
 */
public class DateUtils {
	/**
	 * 日期格式化模板：只包含日期
	 */
	public static final String FORMAT_DATE = "yyyy-MM-dd";

	/**
	 * 日期格式化模板：包含日期和时间
	 */
	public static final String FORMAT_DATE_TIME = "yyyy-MM-dd HH:mm:ss";

	/**
	 * 日期格式化模板：包含日期和时间且无间隔
	 */
	public static final String FORMAT_DATE_TIME2 = "yyyyMMddHHmmss";

	/**
	 * 日期格式化模板：包含日期和时间（精确到毫秒）
	 */
	public static final String FORMAT_DATE_MS = "yyyy-MM-dd HH:mm:ss.SSS";

	/**
	 * 日期格式化模板：包含日期和时间且无间隔（精确到毫秒）
	 */
	public static final String FORMAT_DATE_MS2 = "yyyyMMddHHmmssSSS";

	/**
	 * 将字符串格式的日期解析成日期对象
	 * 
	 * @param source
	 *            日期字符串
	 * @return
	 * @throws ParseException
	 */
	public static Date parse(String source) throws ParseException {
		try {
			return parse(source, FORMAT_DATE_TIME);
		} catch (Exception e) {
			return parse(source, FORMAT_DATE);
		}
	}

	/**
	 * 将字符串格式的日期解析成日期对象
	 * 
	 * @param source
	 *            日期字符串
	 * @param format
	 *            字符串的格式化模板
	 * @return
	 * @throws ParseException
	 */
	public static Date parse(String source, String format) throws ParseException {
		SimpleDateFormat dateFormat = new SimpleDateFormat(format);
		return dateFormat.parse(source);
	}

	/**
	 * 获取日期的字符串表示
	 * 
	 * @param date
	 *            日期对象
	 * @return
	 */
	public static String getAsString(Date date) {
		return getAsString(date, FORMAT_DATE);
	}

	/**
	 * 获取日期的字符串表示
	 * 
	 * @param date
	 *            日期对象
	 * @param format
	 *            格式化模板
	 * @return
	 */
	public static String getAsString(Date date, String format) {
		SimpleDateFormat dateFormat = new SimpleDateFormat(format);
		return dateFormat.format(date);
	}
}
